
# 大写->小写: lower()
# 删掉所有非字母字符：SPACE, 标点符号
#   - isalpha 判断一个字符串是否为字母
#   - replace 删除字符

def step1(string):
  string = string.lower()

  # 遍历 string 中的每一个字符，如果不是字母，就从中删掉
  for char in string:
   if not char.isalpha():
      # char 不是一个字母的时候，我们要把 char 从 string 中删除
      string = string.replace(char, '')

  return string

# agoodsortingalgorithm
#               ^
# {a g o d s r t i n g l h m}
# {}
# 不重复 -> 集合 set -> 表示一个不能包含重复元素的集合
# 如何往 set 里插入同样的元素会怎么样呢？
# Python 会自动只保留一份副本


def step2_and_3(string):
  remains = string # 保存 所有剩余字符串
  new_string = ""

  while len(remains) != 0:
    # 保存 string 中所有第一次出现的字母
    char_set = set()

    for char in string:
      if char not in char_set:
        char_set.add(char)
        # 我们每读到一个首次出现的字符，
        # 我们就要从 remains 中删掉它
        remains = remains.replace(char, '', 1)
    
    # remains 就是题目中要求的剩余的字符串
    
    # char_set 里保存的就是 string 中所有不重复的字符了
    # set -> array
    char_arr = list(char_set)
    char_arr.sort()

    # char_arr -> 字符串
    new_string = new_string + "".join(item for item in char_arr)

    string = remains

  return new_string

step1 = step1("A good sorting algorithm.")
print(step1)
step4 = step2_and_3(step1)
# adghilmnorstagiortgo
# adghilmnorstagiortgoo

# prev = "o"
# bo -> bo
#   ^ 
#

# bboooo
# prev = "b"
# [b, o, o, o, o]
#     ^

def step5(string):
  # 删除 string 中所有相邻的重复字母并返回
  # string -> []
  string_arr = [char for char in string]
  prev = "" # 当前位置的前一个字符

  for i in range(0, len(string_arr)):
    if string_arr[i] == prev:
      string_arr.pop(i) # 删掉位置是 i 的元素
      i -= 1
    else:
      prev = string_arr[i]

  # string_arr 中就是不包含相邻重复的元素了
  # [] -> ""
  return "".join(char for char in string_arr)
